iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Security

從0開始的打Pwn教學系列 第 21

【Day-21】控制程式走向

  • 分享至 

  • xImage
  •  

上一次發現了我們可以控制程式的RBP,如果稍微思考一下可以發現那是不是可以繼續寫下去,然後控制之後轉跳的RIP,沒錯!這次就要來控制程式RIP走向,一樣拿上一次的程式來看,我們一樣輸入Hello!,然後讓程式跑到ret的地方。
https://ithelp.ithome.com.tw/upload/images/20241005/201690169f3q2ZgpGL.png
https://ithelp.ithome.com.tw/upload/images/20241005/20169016hJstUUre58.jpg

這個時候程式的RBP已經被我們改寫成Hello!了,而RIP指著的是ret的Address,看到de68就是放著我們的Hello!,而程式把它吃進去變成RBP,所以de78放著的就是程式接下來要去的地方,也就是說,如果再往下跑一行,RIP就會變成7ffff7de8083。
https://ithelp.ithome.com.tw/upload/images/20241005/20169016W7WnjWadIZ.jpg

所以可以看到,除了Hello!的第一個字H以外,剩下的都被吃到RBP,再輸入下去就可以被RIP吃掉了。
所以就可以得出以下的構造:
https://ithelp.ithome.com.tw/upload/images/20241005/20169016Q3tKoMTUhf.jpg

接著我們就可以來構造一個Address讓RIP去執行,但首先我們要先知道,我們輸入多少才會到Return address的位置,這個時候我先輸入以4個一組的英文字母,比較能夠看的清楚,而我們已經知道第一個字不會送入RBP中,所以第一個字輸入驚嘆號,而一個64位元的記憶體空間能吃的長度是8bytes,所以可以推測RBP會是aaaabbbb,後面的ccccdddd會進入RIP中。
https://ithelp.ithome.com.tw/upload/images/20241005/20169016eqMJ0RSb1H.jpg

然後將程式跑到leave和ret看看RBP和RIP的值分別是多少。
這個時候就能發現,我們控制RBP是aaaabbbb,接著看RIP。
https://ithelp.ithome.com.tw/upload/images/20241005/20169016PcPjZxl3gY.jpg

這邊會顯示程式掛掉了。
https://ithelp.ithome.com.tw/upload/images/20241005/20169016BCZeoYpEBD.png

這是為什麼呢,這就要說到程式記憶體的虛擬位址空間,可以看到不論是GDB還是IDA,暫存器前面的Address都是0x7ff開頭,這是因為每個程式啟動時,都會被分配一個虛擬位址空間,而虛擬位址空間的大小在64位元的系統上的用戶空間通常是0x0到0x00007FFFFFFFFFFF共128TB的範圍。

所以當我們輸入到RIP的值是ccccdddd時,RIP就會跑到0x6464646463636363,已經超出用戶空間的範圍了,RIP找不到跳到哪裡,程式失去了執行的目標,因此程式就爆掉了。

而什麼要這麼規劃呢,這麼做的好處有很多,比較直觀的是我們可以看到連續的記憶體位址,而不是醜醜的非連續記憶體位址,除了這個以外也與資安有關,每個程式都有自己的虛擬位址,同時也會互相隔離,這樣就確保程式之間不能改變對方。

所以如果我們不要輸入過長,只輸入!aaaabbbbccccdd呢?
https://ithelp.ithome.com.tw/upload/images/20241005/20169016YpMe66IgmE.png

可以看到程式的Address被改變了,由此可知我們可以用六個字來控制程式的走向,但我們能輸入的都是ASCII code,如果輸入太少,Address的前面會是0x7ff開頭,沒有程式碼的地址在這,輸入得太多,又沒有能輸入的字串ASCII code的字母是0這個Hex,這樣該放棄嗎,還沒,雖然不能輸入字母,但可以透過其他工具來直接注入呀,下一章開始使用Python來控制程式!


上一篇
【Day-20】Stack buffer overflow 原理
下一篇
【Day-22】Pwntools 介紹
系列文
從0開始的打Pwn教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言